package tests;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

import org.junit.Assert;
import modelo.Anillo;
import modelo.BibliotecaDeCiudades;
import modelo.BibliotecaDeLadrones;
import modelo.BibliotecaDeObjetosRobados;
import modelo.Caso;
import modelo.Ciudad;
import modelo.Descapotable;
import modelo.DiaYHora;
import modelo.Edificio;
import modelo.Femenino;
import modelo.GeneradorDePistas;
import modelo.HeridaDeCuchillo;
import modelo.Juego;
import modelo.Ladron;
import modelo.Pista;
import modelo.PistaCultural;
import modelo.Policia;
import modelo.Recorrido;
import modelo.Rojo;
import modelo.Tenis;
import modelo.Tiempo;
import modelo.GradoStateNovato;
import modelo.GradoStateDetective;
import modelo.GradoStateInvestigador;
import modelo.GradoStateSargento;

import org.junit.Test;


public class TestPolicia {	
	
	@Test
	public void testSubirDeGrado(){
		
		Tiempo elTiempo = new Tiempo(new DiaYHora("Lunes",7),new DiaYHora("Domingo",17));	
		
		Ladron unLadron = new Ladron("Lady Agatha", new Femenino(), new Tenis(), new Rojo(), new Anillo(), new Descapotable());
		
		BibliotecaDeCiudades ciudades = new BibliotecaDeCiudades();
		ciudades.agregarCiudad("Colombo", 6.928517, 79.854897, "Una descripcion", "Azul", "Peso", new ArrayList<String>(), new ArrayList<String>(), new ArrayList<String>(), new ArrayList<String>(), new ArrayList<String>(), new ArrayList<String>(), new ArrayList<String>(), new ArrayList<String>(), "Gobierno", new ArrayList<String>(), "Banco", "Biblioteca", "Puerto");
		Ciudad ciudadDelCaso = ciudades.obtenerCiudad("Colombo");
		
		Recorrido unRecorrido = new Recorrido(ciudadDelCaso);
		
		BibliotecaDeObjetosRobados objetosRobados = new BibliotecaDeObjetosRobados(ciudades);			
		objetosRobados.agregarObjetoRobadoComun("Libro","Colombo");	
		
		BibliotecaDeLadrones ladrones = new BibliotecaDeLadrones();
		
		GeneradorDePistas generadorDePistas = new GeneradorDePistas();
		
		Caso casoActual = new Caso(unLadron, unRecorrido, objetosRobados.obtenerUnObjetoRobadoComun(),  elTiempo, ciudades, generadorDePistas, ladrones);
		
		Policia unPolicia = new Policia("Esmeralda");
		unPolicia.asignarCaso(casoActual);
		
		Assert.assertEquals(GradoStateNovato.class, unPolicia.obtenerGrado().getClass());
		
		for (int i = 1; i < 6; i++){
			
			unPolicia.ganarCaso();
			unPolicia.asignarCaso(casoActual);
			
		}
		Assert.assertEquals(GradoStateDetective.class, unPolicia.obtenerGrado().getClass());
		
		for (int i = 1; i < 11; i++){
			
			unPolicia.ganarCaso();
			unPolicia.asignarCaso(casoActual);
			
		}
		Assert.assertEquals(GradoStateInvestigador.class, unPolicia.obtenerGrado().getClass());
		
		for (int i = 1; i < 21; i++){
			
			unPolicia.ganarCaso();
			unPolicia.asignarCaso(casoActual);
			
		}
		Assert.assertEquals(GradoStateSargento.class, unPolicia.obtenerGrado().getClass());
		
	}

}
